package com.ruoyi.WELD.service.impl;

import com.ruoyi.WELD.domain.LapJoint;
import com.ruoyi.WELD.mapper.LapJointMapper;
import com.ruoyi.WELD.service.ILapJointService;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.validation.Validator;
import java.util.List;

@Service
public class LapJointServiceImpl implements ILapJointService {
    private static final Logger log = LoggerFactory.getLogger(LapJointServiceImpl.class);

    @Autowired
    private LapJointMapper lapJointMapper;

    @Autowired
    protected Validator validator;

    @Override
    public List<LapJoint> selectLapJointList(LapJoint lapJoint) {
        return lapJointMapper.selectLapJointList(lapJoint);
    }

    @Override
    public LapJoint selectLapJointById(Long id) {
        return lapJointMapper.selectLapJointById(id);
    }

    @Override
    public int insertLapJoint(LapJoint lapJoint) {
        return lapJointMapper.insertLapJoint(lapJoint);
    }

    @Override
    public int updateLapJoint(LapJoint lapJoint) {
        return lapJointMapper.updateLapJoint(lapJoint);
    }

    @Override
    public int deleteLapJointById(Long id) {
        return lapJointMapper.deleteLapJointById(id);
    }

    @Override
    public int deleteLapJointByIds(Long[] ids) {
        return lapJointMapper.deleteLapJointByIds(ids);
    }

    @Override
    public List<LapJoint> selectLapJointByIds(Long[] ids) {
        return lapJointMapper.selectLapJointByIds(ids);
    }

    @Override
    public int ClearLapJoint() {return lapJointMapper.ClearLapJoint();}

    @Override
    public String importLapJoint(List<LapJoint> lapJointList, Boolean isUpdateSupport) {
        if (StringUtils.isNull(lapJointList) || lapJointList.size() == 0) {
            throw new ServiceException("导入数据不能为空！");
        }
        int successNum = 0;
        int failureNum = 0;
        StringBuilder successMsg = new StringBuilder();
        StringBuilder failureMsg = new StringBuilder();
        try {
            for (LapJoint lapJoint : lapJointList) {
                boolean isUpdated = false;
                LapJoint lapJointList1 = new LapJoint();
                List<LapJoint> list = lapJointMapper.selectLapJointList(lapJointList1);
                if (list.size() == 0) {
                    lapJointMapper.insertLapJoint(lapJoint);
                } else {
                    String Material3 = lapJoint.getMaterial3();
                    String Material4 = lapJoint.getMaterial4();
                    if (Material3 == null || Material3.isEmpty()) {
                        String M31 = lapJoint.getMaterial1() + lapJoint.getMaterialThickness1() + lapJoint.getMaterial2() + lapJoint.getMaterialThickness2() + lapJoint.getGumming1();
                        String M32 = lapJoint.getMaterial2() + lapJoint.getMaterialThickness2() + lapJoint.getMaterial1() + lapJoint.getMaterialThickness1() + lapJoint.getGumming1();
                        M31 = M31.replace("null", "");
                        M32 = M32.replace("null", "");
                        for (LapJoint lapJoint1 : list) {
                            String W1 = lapJoint1.getMaterial1() + lapJoint1.getMaterialThickness1() + lapJoint1.getMaterial2() + lapJoint1.getMaterialThickness2() + lapJoint1.getMaterial3() + lapJoint1.getMaterialThickness3() + lapJoint1.getMaterial4() + lapJoint1.getMaterialThickness4() + lapJoint1.getGumming1() + lapJoint1.getGumming2() + lapJoint1.getGumming3();
                            W1 = W1.replace("null", "");
                            if (M31.equals(W1) || M32.equals(W1)) {
                                lapJoint.setId(lapJoint1.getId());
                                lapJointMapper.updateLapJoint(lapJoint);
                                isUpdated = true;
                                break;
                            }
                        }
                        if (!isUpdated) {
                            lapJointMapper.insertLapJoint(lapJoint);
                        }
                    } else if (Material4 == null || Material4.isEmpty()) {
                        String M41 = lapJoint.getMaterial1() + lapJoint.getMaterialThickness1() + lapJoint.getMaterial2() + lapJoint.getMaterialThickness2() + lapJoint.getMaterial3() + lapJoint.getMaterialThickness3() + lapJoint.getGumming1() + lapJoint.getGumming2();
                        M41 = M41.replace("null", "");
                        String M42 = lapJoint.getMaterial3() + lapJoint.getMaterialThickness3() + lapJoint.getMaterial2() + lapJoint.getMaterialThickness2() + lapJoint.getMaterial1() + lapJoint.getMaterialThickness1() + lapJoint.getGumming2() + lapJoint.getGumming1();
                        M42 = M42.replace("null", "");
                        for (LapJoint lapJoint1 : list) {
                            String W1 = lapJoint1.getMaterial1() + lapJoint1.getMaterialThickness1() + lapJoint1.getMaterial2() + lapJoint1.getMaterialThickness2() + lapJoint1.getMaterial3() + lapJoint1.getMaterialThickness3() + lapJoint1.getMaterial4() + lapJoint1.getMaterialThickness4() + lapJoint1.getGumming1() + lapJoint1.getGumming2() + lapJoint1.getGumming3();
                            W1 = W1.replace("null", "");
                            if (M41.equals(W1) || M42.equals(W1)) {
                                lapJoint.setId(lapJoint1.getId());
                                lapJointMapper.updateLapJoint(lapJoint);
                                isUpdated = true;
                                break;
                            }
                        }
                        if (!isUpdated){
                        lapJointMapper.insertLapJoint(lapJoint);
                        }
                    } else {
                        String result = lapJoint.getMaterial1() + lapJoint.getMaterialThickness1() + lapJoint.getMaterial2() + lapJoint.getMaterialThickness2() + lapJoint.getMaterial3() + lapJoint.getMaterialThickness3() + lapJoint.getMaterial4() + lapJoint.getMaterialThickness4() + lapJoint.getGumming1() + lapJoint.getGumming2() + lapJoint.getGumming3();
                        result = result.replace("null", "");
                        for (LapJoint lapJoint1 : list) {
                            String result1 = lapJoint1.getMaterial1() + lapJoint1.getMaterialThickness1() + lapJoint1.getMaterial2() + lapJoint1.getMaterialThickness2() + lapJoint1.getMaterial3() + lapJoint1.getMaterialThickness3() + lapJoint1.getMaterial4() + lapJoint1.getMaterialThickness4() + lapJoint1.getGumming1() + lapJoint1.getGumming2() + lapJoint1.getGumming3();
                            result1 = result1.replace("null", "");
                            if (result.equals(result1)) {
                                lapJoint.setId(lapJoint1.getId());
                                lapJointMapper.updateLapJoint(lapJoint);
                                isUpdated = true;
                                break;
                            }
                        }
                        if (!isUpdated){
                        lapJointMapper.insertLapJoint(lapJoint);
                        }
                    }
                }
                successNum++;
                successMsg.append("<br/>" + successNum + "、数据LapJoint " + " 导入成功");
            }
        } catch (Exception e) {
                failureNum++;
                String msg = "<br/>" + failureNum + "、数据LapJoint " + " 导入失败：";
                failureMsg.append(msg + e.getMessage());
                log.error(msg, e);
        }

        if (failureNum > 0) {
            failureMsg.insert(0, "很抱歉，导入失败！共 " + failureNum + " 条数据格式不正确，错误如下：");
            throw new ServiceException(failureMsg.toString());
        } else {
            successMsg.insert(0, "恭喜您，数据已全部导入成功！共 " + successNum + " 条，数据如下：");
        }
        return successMsg.toString();
    }

}
